<?php
/**
* Classe de representação de uma camada de negócio da entidade Lançamento
* A camada de negócio é a parte que engloba as regras e efetua os comandos de execução de um sistema
* @package Sistema
* @subpackage Lançamento
*/
class NLancamento extends negocioPadrao{
	/**
	 * Valor de debito
	 */
	const Debito='D';
	/**
	 * Valor de credito
	 */
	const Credito='C';
	/**
	* @gerador variavelPadrao
	* @var integer Identificador
	*/
	public $idLancamento;
	/**
	* @gerador variavelPadrao
	* @var string Histórico
	*/
	public $historico;
	/**
	* @gerador variavelPadrao
	* @var integer Valor
	*/
	public $valor;
	/**
	* @gerador variavelPadrao
	* @var string Tipo
	*/
	public $tipo;
	/**
	* @gerador variavelPadrao
	* @var integer Conta
	*/
	public $idConta;
	/**
	* @gerador variavelPadrao
	* @var integer Lote
	*/
	public $idLote;
	/**
	* @gerador variavelPadrao
	* @var integer Contra partida
	*/
	public $idContraPartida;
	/**
	* @gerador variavelPadrao
	* @var TData Data
	*/
	public $data;
	/**
	* Retorna o nome da propriedade que contém o valor chave de negócio
	* @gerador metodoPadrao
	* @return string
	*/
	function nomeChave(){ return 'idLancamento'; }
	/**
	* Executa o comando de gravação do objeto
	* @param bolean caso verdadeiro irá incluir com a chave de negócio passada caso falso irá verificar, se foi passada a chave irá alterar senão irá incluir
	*/
	public function gravar($gravarComChavePassada = false){
		$nLote = new NLote($this->pegarConexao());
		if ($nLote->ler($this->pegarIdLote())->pegarStatus() == NLote::fechado)
			throw new erroNegocio('O lote está fechado e não pode ser alterado.');
		parent::gravar($gravarComChavePassada);
	}
    /**
    * Executa o comando de exclusão do objeto
    */
    public function excluir(){
		$this->ler($this->valorChave()); 
		$nLote = new NLote($this->pegarConexao());
		if ($nLote->ler($this->pegarIdLote())->pegarStatus() == NLote::fechado)
			throw new erroNegocio('O lote está fechado e não pode ser alterado.');
		parent::excluir();
	}
	/**
	 * Lê os lançamentos de uma conta
	 * @param pagina $pagina
	 * @param array $arParametros
	 * @return colecaoPadraoNegocio
	 */
	public function lerPorConta(pagina $pagina , $arParametros){
		return $this->vetorPraColecao($this->pegarPersistente()->lerPorConta($pagina,$arParametros));
	}
	/**
	 * Lê os total do movimento de uma conta
	 * @param pagina $pagina
	 * @param array $arParametros
	 * @return array
	 */
	public function lerMovimentoPorConta($arParametros){
		return $this->pegarPersistente()->lerMovimentoPorConta($arParametros);
	}
}
?>